package com.coszero.common.network.ftp;

import java.io.File;
import java.util.LinkedList;

/**
 * Desc:ftp传输得接口规范
 * 需要权限 android.permission.WRITE_EXTERNAL_STORAGE,android.permission.INTERNET
 *
 * @author coszero
 * Email:xmqian93@163.com
 * Date:2023/02/23 14:46
 */
public interface FTPInterface {

    /**
     * 连接到FTP服务器
     *
     * @param host ftp服务器域名或ip地址 ，注意：前缀不要带'ftp://'字符
     * @param username 访问用户名
     * @param password 访问密码
     * @param port 端口
     * @return 是否连接成功
     */
    boolean ftpConnect(String host, String username, String password, int port);

    /**
     * 断开ftp服务器连接
     *
     * @return 断开结果
     */
    boolean ftpDisconnect();

    /**
     * ftp 文件上传
     *
     * @param srcFilePath 源文件目录
     * @param desFileName 文件名称
     * @param desDirectory 目标文件
     * @return 文件上传结果
     */
    boolean ftpUpload(String srcFilePath, String desFileName, String desDirectory);

    /**
     * ftp 文件上传,拥有进度
     *
     * @param srcFilePath 源文件目录
     * @param desFileName 文件名称
     * @param desDirectory 目标文件
     */
    void ftpUploadProgress(String srcFilePath, String desFileName, String desDirectory, FTPUploadListener listener);

    /**
     * ftp 切换到改目录
     *
     * @param path 更改的路径
     * @return 更改是否成功
     */
    boolean ftpChangeDir(String path);

    /**
     * 创建文件夹
     *
     * @param dirPath 创建的目录
     * @return true:创建成功
     */
    boolean ftpMakeDir(String dirPath);

    /**
     * @return ftp工作目录
     */
    String ftpWorkingDir();

    /**
     * ftp文件夹中文件是否已存在
     *
     * @param fileName 文件名包含后缀
     * @param deleteFile 是否需要删除此文件重新上传,true:删除,false:不删除也不上传
     * @return true:存在  false:不存在
     */
    boolean ftpFileIsExists(String fileName, boolean deleteFile);

    /**
     * 上传单个文件
     *
     * @param singleFilePath 单文件路径
     * @param remotePath 远程路径
     * @param remoteFileName 远程路径
     */
    void uploadSingleFile(String singleFilePath, String remotePath, String remoteFileName,FTPUploadListener listener);

    /**
     * 上传多个文件
     *
     * @param fileList 文件列表
     * @param remotePath 远程地址
     * @param listener 上传结果监听
     */
    void uploadMultiFile(LinkedList<File> fileList, String remotePath, FTPUploadListener listener);
}
